<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>数组实例的方法：copyWithin</title>
</head>
<body>
<script>
    /**
     * 方法：copyWithin()
     * 功能：当前数组内部，把指定位置元素 复制到 其他位置【覆盖原有元素】
     * 返回值：当前数组
     * 属于：数组实例
     * 参数：
     *      1. target 必须 从该位置开始【替换数据】。负值，表示倒数
     *      2. start 可选 从该位置[默认0]开始【读取数据】。负值，表示倒数
     *      3. end 可选 到该位置【停止读取】数据，默认等于数组长度。负值，表示倒数
     *      注：都应该是数值，不是，会先自动转
     * */
    [1, 2, 3, 4, 5].copyWithin(0, 3) // [4, 5, 3, 4, 5]
    /*
    * 从位置 0，即数字 1开始，它后面都将被替换【包括本身】
    * 从位置 3，即数字 4开始，取出替换的数据，即数字 4 5
    * 然后替换[4, 5, 3, 4, 5] 因为就两个
    * [1,2,3,4,5].copyWithin(3, 3) ==> [1,2,3,4,5]
    * 将从 3 号位直到数组结束的成员（4 和 5），复制到从 0 号位开始的位置，结果覆盖了原来的 1 和 2
    * */
    // 例子大全：
    // 将3号位复制到0号位
    [1, 2, 3, 4, 5].copyWithin(0, 3, 4)
    // [4, 2, 3, 4, 5]

    // -2相当于3号位，-1相当于4号位
    [1, 2, 3, 4, 5].copyWithin(0, -2, -1)
    // [4, 2, 3, 4, 5]

    // 将3号位复制到0号位
    [].copyWithin.call({length: 5, 3: 1}, 0, 3);
    // {0: 1, 3: 1, length: 5}

    // 将2号位到数组结束，复制到0号位
    let i32a = new Int32Array([1, 2, 3, 4, 5]);
    i32a.copyWithin(0, 2);
    // Int32Array [3, 4, 5, 4, 5]

    // 对于没有部署 TypedArray 的 copyWithin 方法的平台
    // 需要采用下面的写法
    [].copyWithin.call(new Int32Array([1, 2, 3, 4, 5]), 0, 3, 4);
    // Int32Array [4, 2, 3, 4, 5]
</script>
</body>
</html>